/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DBManager;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 *Данный класс реализует общие для таблиц БД методы обработки хранимых данных
 * @author Ivan
 */
public abstract class DataManager {

    protected Connection connection;
    protected PreparedStatement SelectPrepStatement;
    protected PreparedStatement UpdatePrepStatement;
    protected PreparedStatement InsertPrepStatement;
    protected PreparedStatement DeletePrepStatement;
    protected ResultSet DataSet;
    public final String TableName;
    public String ID_Table;

    protected DataManager(Connection connection, String TableName) {

        this.connection = connection;
        this.TableName = TableName;

        SelectPrepStatement = null;
        UpdatePrepStatement = null;
        InsertPrepStatement = null;
        DeletePrepStatement = null;
        DataSet = null;
    }

    /**
     * Обновить строку в таблице
     * @throws SQLException
     */
    public void UpdateRow() throws SQLException {

        connection.setAutoCommit(false);

        SetValues(UpdatePrepStatement);
        UpdatePrepStatement.executeUpdate();

        connection.commit();

        connection.setAutoCommit(true);
    }

     /**
     * Втавить новую строку в таблицу
     * @throws SQLException
     */
    public void InsertRow() throws SQLException {

        connection.setAutoCommit(false);

        SetValues(InsertPrepStatement);
        InsertPrepStatement.executeUpdate();

        connection.commit();

        connection.setAutoCommit(true);
    }

    /**
     * Удалить строку из таблицы
     * @throws SQLException
     */
    public void DeleteRow() throws SQLException {

        connection.setAutoCommit(false);

        SetValues(DeletePrepStatement);
        DeletePrepStatement.executeUpdate();

        connection.commit();

        connection.setAutoCommit(true);


    }

    /**
     * Загрузить набор данных таблицы
     * @throws SQLException
     */
    public ResultSet LoadTable() throws SQLException {
        DataSet = SelectPrepStatement.executeQuery();
        return DataSet;
    }

    /**
     * Задать-Обновить инофрмацию в объекте PrepareStatement
     * @param prepareStatement
     * @throws SQLException
     */
    protected abstract void SetValues(PreparedStatement prepareStatement) throws SQLException;
}
